package demo03;

import java.util.ArrayList;
import java.util.Collection;

/*
 *  泛型的上限限定：? extends E     代表使用的泛型只能是E类型的子类/本身
 *  泛型的下限限定：? super E       代表使用的泛型只能是E类型的父类/本身
 */
public class Demo06Generic {
    public static void main(String[] args) {
        Collection<Integer> list1 = new ArrayList<Integer>();
        Collection<String> list2 = new ArrayList<String>();
        Collection<Number> list3 = new ArrayList<Number>();
        Collection<Object> list4 = new ArrayList<Object>();

        getElement(list1);
        // getElement(list2); // 报错，String类不是Number类的子类
        getElement(list3);
        // getElement(list4); // 报错，Object类不是Number类的子类

        // getElement2(list1); // 报错，Integer类不是Number类的父类
        // getElement2(list2); // 报错，String类不是Number类的父类
        getElement2(list3);
        getElement2(list4);

        /*
         *  类与类之间的继承关系
         *  Integer extends Number extends Object
         *  String extends Object
         */
    }

    // 泛型的上限：此时的泛型?，必须是Number类型或者Number类型的子类
    public static void getElement(Collection<? extends Number> coll) {
    }

    // 泛型的下限：此时的泛型?，必须是Number类型或者Number类型的父类
    public static void getElement2(Collection<? super Number> coll) {
    }
}
